package com.cyh.generic;

import java.util.List;

public class Box<E> {
    private E first;

    public Box(E first) {
        this.first = first;
    }

    public E getFirst() {
        return first;
    }

    public void setFirst(E first) {
        this.first = first;
    }

    //只能传Number, 而不能穿Integer
    /*public static void showBox(Box<Number> box) {
        Number first = box.getFirst();
    }*/

    //不能重载，报错
   /* public static void showBox(Box<Integer> box) {
    }*/

    //? 表示可以传递任何类型的实参， 参数类型有传入的实参类型决定。
    /*public static void showBox(Box<?> box) {
        Object first = box.getFirst();
    }*/

    //上限限定， 表示可以传Number或者Number的子类， 传参一般用上限
    /*public static void showBox(Box<? extends Number> box) {
        Number first = box.getFirst();
    }*/

    //下面这一句报错：上限集合类不能add, add会报错, 所以需要下限
    /*public static void showBox(List<? extends Number> list) {
        list.add(1);
    }*/

    //不报错, 传参只能是Parent
    /*public static void showBox(List<? super Parent> list) {
        list.add(new Child());
        list.add(new Parent());
    }*/

    //第二个add报错, 传参可以是Child或者Parent
    /*public static void showBox(List<? super Child> list) {
        list.add(new Child());
        list.add(new Parent());
    }*/


    //两个add都报错, 传参可以是child或者Parent
    /*public static void showBox(List<? extends Parent> list) {
        list.add(new Child());
        list.add(new Parent());
    }*/

    //两个add都报错, 传参只能是Child
    /*public static void showBox(List<? extends Child> list) {
        list.add(new Child());
        list.add(new Parent());
    }*/


}
